Le forum officiel du site, discussions, aide, astuces...
Vous n'êtes pas identifié.
Suite à ce message http://www.gentilkiwi.com/forum/message-105.htm#p105 j'aimerais y ajouté le nombre d'auditeurs en ligne (Current Listeners) si possible 
<?php
function connect_icecast($host, $port)
{
$fp = @fsockopen($host, $port, $errno, $errstr, 3);
if(!$fp)
return false;
fputs($fp, 'GET /status2.xsl' . " HTTP/1.0\r\nUser-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9)\r\n\r\n");
$page = '';
while(!feof($fp))
$page .= fread($fp, 1000);
fclose($fp);
return $page;
}
$page = connect_icecast('metalizer.fr', 8000);
preg_match_all('`, - ([^,]*)`i', $page, $matches);
echo 'En ce moment : <strong>' . $matches[1][1] . '</strong><br />';
?>Merci d'avance pour votre aide et vos conseils !
Hors ligne
Dans tous les cas je prévois de faire un script plus complet pour icecast
Mais tu es conscient que c'est pour serveur Icecast et non ShoutCast ?
Hors ligne
ah je n'es pas fait attention
pourtant ca marche 
Pas de soucis je met en suspend pendant la création de ton script 
Merci
Hors ligne
Tu as besoin d'un script pour ShoutCast ou Icecast alors ?
Pour un ShoutCast, le script complet se trouve ici :
http://www.gentilkiwi.com/documentation … utcast.htm
Hors ligne
Icecast, excuse d'avoir oublié de précisé
Hors ligne
Voila, à prioris cela fonctionne, MAIS il y a un bémol :
Je me fie au fichier 'status2.xsl' qui n'est pratiquement pas modifié sur les serveurs IceCast (contrairement à la page d'accueil).
Or ce fichier ne donne pas les informations qu'il devrait donner
Mais pour ce qui est du nombre d'auditeurs, du nom du point de montage et du titre en cours, il fait son boulot
Même si il est construit de manière incorrecte....
Voici donc un petit script dont le résultat est le suivant (par exemple) :
Array
(
[/animateur.mp3] => Array
(
[name] =>
[listeners] => 0
[description] =>
[artist] =>
[title] =>
[url]=>
)
[/playlist.mp3] => Array
(
[name] =>
[listeners] => 1
[description] =>
[artist] =>
[title] => Killing Joke - Eighties
[url]=>
)
)Et évidement le script en lui même, mais pas encore testé à grande échelle
:
<?php
function connect_icecast($host, $port)
{
$fp = @fsockopen($host, $port, $errno, $errstr, 3);
if(!$fp)
return false;
fputs($fp, 'GET /status2.xsl' . " HTTP/1.0\r\nUser-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9)\r\n\r\n");
$page = '';
while(!feof($fp))
$page .= fread($fp, 1000);
fclose($fp);
return $page;
}
function tab_icecast($host, $port)
{
$contenu = connect_icecast($host, $port);
if ($contenu)
{
$tabChamps = array(2 => 'name', 3 => 'listeners', 4 => 'description', 5 => 'artist', 6 => 'title', 7 => 'url');
if (preg_match_all('`(/[^,]*),,([^,]*),([^,]*),([^,]*),([^-]*) - ([^,]*),([^,<\/]*)`', $contenu, $resultat))
{
foreach($resultat[1] as $numPoint => $mountName)
foreach ($tabChamps as $index => $champ)
$tabIce[$mountName][$champ] = $resultat[$index][$numPoint];
return $tabIce;
}
else
return false;
}
else
return false;
}
$tabIceCast = tab_icecast('www.metalizer.fr', 8000);
if($tabIceCast)
{
echo '<pre>';
print_r($tabIceCast);
echo '</pre>';
}
else
echo 'Parsing impossible';
?>Il doit t'être facile de récupérer le nombre d'auditeur d'un point en particulier via cette syntaxe : tabIceCast['/point']['listeners'] 
Astuce : si l'on a accès au fichier status2.xsl en écriture, on peut aisément corriger les variables incorrecte de ce fichier pour afficher toutes les bonnes valeurs :
Commençons par modifier la fin de 'expression régulière du script :
Trouver :
([^,<\/]*)
Remplacer par :
([^,]*)
Dans le fichier status2.xsl :
Trouver :
<xsl:for-each select="source"> <xsl:value-of select="@mount" />,,<xsl:value-of select="server_name" />,<xsl:value-of select="listeners" />,<xsl:value-of select="server_description" />,<xsl:value-of select="artist" /> - <xsl:value-of select="title" />,<xsl:value-of select="server_url" />, </xsl:for-each>
Remplacer par :
<xsl:for-each select="source"> <xsl:value-of select="@mount" />,,<xsl:value-of select="server_name" />,<xsl:value-of select="listeners" />,<xsl:value-of select="server_description" />,<xsl:value-of select="artist" /> - <xsl:value-of select="title" />,<xsl:value-of select="server_url" />, </xsl:for-each>
Le résultat n'en est que meilleur :
[/test.mp3] => Array
(
[name] => Kiwi Test
[listeners] => 1
[description] => Kiwi Test
[artist] =>
[title] => Gwen Stefani - Yummy
[url]=> http://www.gentilkiwi.com/
)Hors ligne
Ah oui trés bien, bon boulot
merci beaucoup j'ai testé et ca marche trés bien, parcontre l'affichage 
Derniére question, je voulais savoir si il été possible de mettre sous cette forme :
Sur /animateur.mp3 il y a X auditeurs. Titre en cours : X
Sur /playlist.mp3 il y a X auditeurs. Titre en cours : X
Quelque chose dans ce style la, merci 
Hors ligne
Tu ne dois pas connaitre le PHP toi ^^, parce qu'il n'y a plus qu'à sortir les infos du tableau 
<?php
[...]
foreach($tabIceCast as $key => $value)
echo '<p>Sur <strong>' . $key . '</strong> il y a <strong>' . $value['listeners'] . '</strong> auditeurs. Titre en cours : <strong>' . $value['title'] . '</strong></p>';
?>Je fais ceci depuis ma salle de cours, donc je ne sais pas si cela fonctionne, à toi de voir.
Hors ligne
Oui je ne my connais pas trop en php
en tout cas rapide et efficace tes réponses je te remercie beaucoup, je ferais attention pour la prochaine fois 
Hors ligne